void (* tree_match) (const GtkCssSelectorTree *tree,
const GtkCssMatcher *matcher,
GHashTable *res);
- GtkCssChange (* get_change) (const GtkCssSelector *selector);
+ GtkCssChange (* get_change) (const GtkCssSelector *selector,
+ GtkCssChange previous_change);
int (* compare_one) (const GtkCssSelector *a,
const GtkCssSelector *b);
return selector->class->match (selector, matcher);
}
-static GtkCssChange
-gtk_css_selector_get_change (const GtkCssSelector *selector)
-{
- if (selector == NULL)
- return 0;
-
- return selector->class->get_change (selector);
-}
-
static int
gtk_css_selector_compare_one (const GtkCssSelector *a, const GtkCssSelector *b)
{
}
static GtkCssChange
-gtk_css_selector_descendant_get_change (const GtkCssSelector *selector)
+gtk_css_selector_descendant_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return _gtk_css_change_for_child (gtk_css_selector_get_change (gtk_css_selector_previous (selector)));
+ return _gtk_css_change_for_child (previous_change);
}
static const GtkCssSelectorClass GTK_CSS_SELECTOR_DESCENDANT = {
}
static GtkCssChange
-gtk_css_selector_child_get_change (const GtkCssSelector *selector)
+gtk_css_selector_child_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return _gtk_css_change_for_child (gtk_css_selector_get_change (gtk_css_selector_previous (selector)));
+ return _gtk_css_change_for_child (previous_change);
}
static int
}
static GtkCssChange
-gtk_css_selector_sibling_get_change (const GtkCssSelector *selector)
+gtk_css_selector_sibling_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return _gtk_css_change_for_sibling (gtk_css_selector_get_change (gtk_css_selector_previous (selector)));
+ return _gtk_css_change_for_sibling (previous_change);
}
static int
}
static GtkCssChange
-gtk_css_selector_adjacent_get_change (const GtkCssSelector *selector)
+gtk_css_selector_adjacent_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return _gtk_css_change_for_sibling (gtk_css_selector_get_change (gtk_css_selector_previous (selector)));
+ return _gtk_css_change_for_sibling (previous_change);
}
static int
}
static GtkCssChange
-gtk_css_selector_any_get_change (const GtkCssSelector *selector)
+gtk_css_selector_any_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return gtk_css_selector_get_change (gtk_css_selector_previous (selector));
+ return previous_change;
}
static int
static GtkCssChange
-gtk_css_selector_name_get_change (const GtkCssSelector *selector)
+gtk_css_selector_name_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return gtk_css_selector_get_change (gtk_css_selector_previous (selector)) | GTK_CSS_CHANGE_NAME;
+ return previous_change | GTK_CSS_CHANGE_NAME;
}
static int
}
static GtkCssChange
-gtk_css_selector_region_get_change (const GtkCssSelector *selector)
+gtk_css_selector_region_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
GtkCssChange change;
- change = gtk_css_selector_get_change (gtk_css_selector_previous (selector));
+ change = previous_change;
change |= GTK_CSS_CHANGE_REGION;
change |= _gtk_css_change_for_child (change);
}
static GtkCssChange
-gtk_css_selector_class_get_change (const GtkCssSelector *selector)
+gtk_css_selector_class_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return gtk_css_selector_get_change (gtk_css_selector_previous (selector)) | GTK_CSS_CHANGE_CLASS;
+ return previous_change | GTK_CSS_CHANGE_CLASS;
}
static int
}
static GtkCssChange
-gtk_css_selector_id_get_change (const GtkCssSelector *selector)
+gtk_css_selector_id_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return gtk_css_selector_get_change (gtk_css_selector_previous (selector)) | GTK_CSS_CHANGE_ID;
+ return previous_change | GTK_CSS_CHANGE_ID;
}
static GtkCssChange
-gtk_css_selector_pseudoclass_state_get_change (const GtkCssSelector *selector)
+gtk_css_selector_pseudoclass_state_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return gtk_css_selector_get_change (gtk_css_selector_previous (selector)) | GTK_CSS_CHANGE_STATE;
+ return previous_change | GTK_CSS_CHANGE_STATE;
}
static int
}
static GtkCssChange
-gtk_css_selector_pseudoclass_position_get_change (const GtkCssSelector *selector)
+gtk_css_selector_pseudoclass_position_get_change (const GtkCssSelector *selector, GtkCssChange previous_change)
{
- return gtk_css_selector_get_change (gtk_css_selector_previous (selector)) | GTK_CSS_CHANGE_POSITION;
+ return previous_change | GTK_CSS_CHANGE_POSITION;
}
static int
return g_string_free (string, FALSE);
}
+
GtkCssChange
-_gtk_css_selector_get_change (const GtkCssSelector *selector)
+_gtk_css_selector_tree_match_get_change (const GtkCssSelectorTree *tree)
{
- g_return_val_if_fail (selector != NULL, 0);
+ GtkCssChange change = 0;
+
+ while (tree)
+ {
+ change = tree->selector.class->get_change (&tree->selector, change);
+ tree = tree->parent;
+ }
- return gtk_css_selector_get_change (selector);
+ return change;
}
/**
void _gtk_css_selector_print (const GtkCssSelector *selector,
GString *str);
-GtkCssChange _gtk_css_selector_get_change (const GtkCssSelector *selector);
gboolean _gtk_css_selector_matches (const GtkCssSelector *selector,
const GtkCssMatcher *matcher);
int _gtk_css_selector_compare (const GtkCssSelector *a,
const GtkCssSelector *b);
-void _gtk_css_selector_tree_free (GtkCssSelectorTree *tree);
-GPtrArray *_gtk_css_selector_tree_match_all (GtkCssSelectorTree *tree,
- const GtkCssMatcher *matcher);
-void _gtk_css_selector_tree_match_print (const GtkCssSelectorTree *tree,
- GString *str);
+void _gtk_css_selector_tree_free (GtkCssSelectorTree *tree);
+GPtrArray * _gtk_css_selector_tree_match_all (GtkCssSelectorTree *tree,
+ const GtkCssMatcher *matcher);
+void _gtk_css_selector_tree_match_print (const GtkCssSelectorTree *tree,
+ GString *str);
+GtkCssChange _gtk_css_selector_tree_match_get_change (const GtkCssSelectorTree *tree);
+
GtkCssSelectorTreeBuilder *_gtk_css_selector_tree_builder_new (void);
void _gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder,